import { login, register, getuserInfo, getMyPermissions } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { Message } from 'element-ui'
import router from '@/router'
export default {
  namespaced: true,
  state: {
    token: getToken(),
    userInfo: {},
    // 个人权限
    menus: [],
    // 按钮权限
    points: []
  },
  mutations: {
    // 设置(保存)token
    setToken(state, newToken) {
      state.token = newToken
      setToken(newToken)
    },
    // 删除token
    removeToken(state) {
      state.token = null
      removeToken()
    },
    // 设置用户信息
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
      // setToken(userInfo)
    },
    // 删除用户信息
    removeUserInfo(state) {
      state.userInfo = {}
    },
    // 保存用户权限
    setUserMenus(state, menus) {
      state.menus = menus
    },
    // 保存用户按钮权限
    setPonts(state, points) {
      state.points = points
    }
  },
  actions: {
    async getLogin(store, data) {
      // 调用登录接口
      // 当接口的返回值是一个错误对象的时候，则终止代码的继续执行
      const result = await login(data)
      // 调用mutations中的setToken保存token
      // 后端接口会返回一个success字段给我们，当这个字段的值为true表示
      console.log(result)
      // 登陆成功 否则失败
      Message.success('登陆成功')
      // 保存token和用户信息
      store.commit('setToken', result.jwt)
      // 保存当前的时间戳
      localStorage.setItem('loginTime', Date.now())
      // 登陆成功,跳转页面
      router.push('/')
    },
    // 获取用户信息
    async getUserInfo(store) {
      const res = await getuserInfo()
      store.commit('setUserInfo', res)
      // 获取当前用户的权限信息
      const result = await getMyPermissions()
      // store.commit('setUserMenus', result)
      store.commit('setUserMenus', result.menus)
      store.commit('setPonts', result.points)
    },
    // 注册
    async Register(store, data) {
      const result = await register(data)
      console.log(result)
      Message.success('注册成功')
      router.push('/login')
    },
    // 退出登录
    logout(store) {
      // 清除个人信息
      store.commit('removeUserInfo')
      // 清除token
      store.commit('removeToken')
    }
  }
}

